import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Config {
    //这样是让方法的调用者去改掉这个错误，
    File file;

//    编译时异常，表示该文件不存在
//    此处不处理，也没有能力处理，应该将错误信息报告给调用者，让调用者检查文件名字是否给错了
//
public static void openConfig(String filename) throws IOException {

    if (!filename.equals("config.ini")){
        throw new FileNotFoundException("配置文件名称错误");
        //这个错误，我们没办法避免，只能靠方法的调用者去更改自己文件的名字
        //
    }
    if (filename.endsWith(".ini")){
        throw new IOException("文件不是.ini文件");
    }
    //若没有出错，那么文件就打开了
    readConfig();
        //System.out.println("只读模式");

}
public static void readConfig(){

    //System.out.println("只读模式");
}
//1.throws必须跟方法的参数列表之后
    //2.声名的异常必须是Exception或者Except的子类
    //3.方法内部如果抛出了多个异常，throws之后必须要跟多个异常类型，之间使用逗号隔开，如果抛出多个异常类型具有父子关系，直接声名父类就行
    //调用者声名抛出方法异常时候，调用者必须要对该异常进行处理，或者继续使用throws抛出
public static void main(String[] args) {
    Config config=new Config();
    try{
        config.openConfig("config2.txt");
        System.out.println("文件打开成功");
    }catch(IOException e){
        //异常的处理方式
        //纸打印异常信息
        System.out.println(e.getMessage());
        //只打印异常类型：异常信息
        System.out.println(e);
        e.printStackTrace();
    }

    //一旦异常被捕获了，此处的代码会执行
    //只要被捕获，就执行，不是解决

    //关于异常的处理方式
    //异常的种类很多，我们要根据不同的业务场景来决定
    //对于比较严重的问题（例如和算钱i相关的场景）应该让程序直接崩溃。防止造成更严重的后果
    //对于不太严重的问题（大多数场景）。可以记录错误日志，并通过监控报警程序以及时通知程序员
    //对于可能会回复的问题（和网络相关的场景），可以尝试进行重试

    //在我们当前的代码中采取的时经过简化的第二种方式，我们记录的错误日志时出现异常的方法调用信息，能很快速的帮我们找到出现异常的位置，以后在实际工作中我们会采取更加
    //完善的方式来记录异常信息
    //1.try块内抛出异常位置之后的代码将不会被执行，只要有一个地方错误，后面的try块都不会在执行
    //2.如果抛出类型与catch异常类型不匹配，也就是异常不会被正常捕获，也就不会被处理，继续往外抛，直到
    //jvm收到后，中断程序，--异常是按照类型来捕获的
    //哪里的e类似与实例化的一个东西
    //
    System.out.println("异常已经被处理了，这里的代码也可以执行");
}
}

//try-catch捕获并处理
//前面那个没有真正的处理，只是，将异常告诉给调用者，由调用者处理，如果真正要对异常进行处理，就要使用try catch

//
